/**
  * initCommot方法用于自动提交文件到远程地址，
  * 依赖于shelljs库，它是一个构造函数，你可以在初始化new的时候传入一个对象
  * {url:"仓库的远程地址",isdel:'在执行完脚本后是否需要删除克隆文件夹'}；
  * 在拿到初始化后的对象(a)，你可以调用:
  * a.init(url:'拿去打包后的文件地址（绝对路径）',fileName:['文件名','文件夹名'])执行脚本
  * 
  */

const shell = require('shelljs');
class initCommot {
    constructor(argParams) {

        // 拿取本地文件存入当前文件夹./autoCommit
        this.copyFile = (url, fileName) => {
            url = url ? url : 'C:\\Users\\txm\\Desktop\\nodejs\\integrated-app\\dist'
            fileName = fileName ? fileName : ['assets', 'index.html', 'vite.svg']
            fileName.forEach(item => {
                item = url + '\\' + item;
                // shell.echo("文件路径：", item);
                shell.cp('-R', item, './');
            });
        };
        // 执行文件推送到仓库命令
        this.pushFile = (comStr) => {
            comStr = comStr ? comStr : "没有什么想写得"
            // 编写终端命令
            let gitOrder = {
                add: 'git add .',
                commit: `git commit -m "${comStr}"`,
                push: 'git push -u origin master'// 第一次推送时
            }
            Object.keys(gitOrder).forEach(key => {
                if (shell.exec(gitOrder[key]).code !== 0) {
                    shell.echo('Error: Git add failed')
                    shell.exit(1)
                }
            })

        }
        this.init = async (url, fileName) => {
            const that = this
            try {
                if (!argParams.url) {
                    shell.echo("Please give me a 远程库地址");
                    return shell.exit(1)
                }
                //判定git命令是否可用
                if (!shell.which('git')) {
                    //向命令行打印git命令不可用的提示信息
                    shell.echo('Sorry, this script requires git');
                    //退出当前进程
                    shell.exit(1);
                }
                // // 创建文件夹
                // shell.mkdir("./autoCommit");
                // // 进入新建的文件夹
                // shell.cd("./autoCommit");
                // git初始化
                let cdStr = argParams.url.slice(argParams.url.lastIndexOf("/") + 1, argParams.url.lastIndexOf("g") - 1)
                shell.exec('git clone ' + argParams.url, function (code, stdout, stderr) {
                    if (code === 128) {
                        shell.echo("已存在克隆文件夹，跳过git clone，继续提交代码。。。");
                    }
                    shell.cd("./" + cdStr);
                    that.copyFile(url, fileName)
                    that.pushFile()
                    if (argParams.isdel) {
                        // 进入新建的文件夹
                        shell.cd("../");
                        // 删除文件目录
                        shell.rm("-rf", "./" + cdStr);
                    }
                });
                return "git clone 命令执行成功。"
            } catch (err) {
                console.log(err)
                return
            }
        }
    }
}
// const commitUrl = 'https://github.com/txmlftl/appDemo.github.io.git'
const a = new initCommot({ url: "git@github.com:txmlftl/appDemo.github.io.git", isdel: false })
a.init()